RAIS  3.2
C:/Projekte/RAIS/ApplicationLogiLayer/RADEVSearchResult.cs
Go to the documentation of this file.
00001 using System;
00002 using System.Collections.Generic;
00003 using System.Text;
00004 using RAIS.DataAccessLayer;
00005 using RAIS.Common.RADEVSearchClasses;
00006 namespace RAIS.ApplicationLogicLayer
00007 {
00008     public class RADEVSearchResult
00009     {
00010         #region Fields
00011         string searchCommandTemp = " SELECT * FROM [RADEV Search - Result]({1}) {0} ";
00012         string _tableName = "result";
00013         StringBuilder searchCommand = null;
00014         int _userId;
00015         #endregion
00016         #region Constructors
00017 
00018 
00019 
00020 
00021         private RADEVSearchResult(int userId) 
00022         {
00023             _userId = userId;
00024         }
00030         public RADEVSearchResult(int radevid, int userId)
00031             : this(userId)
00032         {
00033             searchCommand = new StringBuilder(string.Format(searchCommandTemp, _tableName,userId) + " where " + _tableName + ".[ID]=" + radevid.ToString());
00034         }
00041         public RADEVSearchResult(List<RADEVSearchCriteria> criterias, int userId, bool isOR)
00042             : this(userId)
00043         {
00044             searchCommand = new StringBuilder(string.Format(searchCommandTemp, _tableName, userId));
00045 
00046             if (!isOR)
00047             {
00048                 foreach (RADEVSearchCriteria criteria in criterias)
00049                     searchCommand.Append(string.Format(criteria.GetFilterString(isOR), "result"));
00050             }
00051             else
00052             {
00053                 if (criterias.Count != 0)
00054                 {
00055                     bool firstFilter = true;
00056                     searchCommand.Append(" join ( ");
00057                     foreach (RADEVSearchCriteria criteria in criterias)
00058                     {
00059                         if (!firstFilter)
00060                             searchCommand.Append(" union ");
00061                         searchCommand.Append(criteria.GetFilterString(isOR));
00062                         firstFilter = false;
00063                     }
00064                     searchCommand.Append(" ) filters on filters.ID=result.id");
00065                 }
00066             }
00067         }
00075         public RADEVSearchResult(int radevid, List<RADEVSearchCriteria> criterias, int userId, bool isOR)
00076             : this(userId)
00077         {
00078             searchCommand = new StringBuilder(string.Format(searchCommandTemp, _tableName, userId));
00079 
00080             if (!isOR)
00081             {
00082                 foreach (RADEVSearchCriteria criteria in criterias)
00083                     searchCommand.Append(string.Format(criteria.GetFilterString(isOR), "result"));
00084                 searchCommand.Append(" join (select ID from (" +
00085                     string.Format(searchCommandTemp, _tableName, userId) + " where " + _tableName + ".[ID]=" + radevid.ToString() + ") radevid) radevid on radevid.ID=result.id ");
00086             }
00087             else
00088             {
00089                 bool firstFilter = true;
00090                 searchCommand.Append(" join ( ");
00091                 foreach (RADEVSearchCriteria criteria in criterias)
00092                 {
00093                     if (!firstFilter)
00094                         searchCommand.Append(" union ");
00095                     searchCommand.Append(criteria.GetFilterString(isOR));
00096                     firstFilter = false;
00097                 }
00098                 if (!firstFilter)
00099                     searchCommand.Append(" union ");
00100                 searchCommand.Append(" select ID from (" +
00101                     string.Format(searchCommandTemp, _tableName, userId) + " where " + _tableName + ".[ID]=" + radevid.ToString() + ") radevid ");
00102                 searchCommand.Append(" ) filters on filters.ID=result.id");
00103             }
00104         }
00105 
00106         #endregion
00107         #region Properties
00108 
00109 
00110 
00111         public string SearchCommand
00112         {
00113             get
00114             {
00115                 return searchCommand != null ? searchCommand.ToString() : "";
00116             }
00117         }
00118         #endregion
00119         #region Public methods
00120 
00121 
00122 
00123 
00124 
00125 
00126         public static RADEVSearchResult LoadCriterias(int id, int userId)
00127         {
00128             RADEVSearchResult searchResult = new RADEVSearchResult(userId);
00129             string savedSearch = DataAccessLayer.RADEVSearch.GetSavedSearch(id);
00130             int start = savedSearch.IndexOf('(');
00131             int end = savedSearch.IndexOf(')');
00132 
00133             searchResult.searchCommand = new StringBuilder();
00134             searchResult.searchCommand.Append(savedSearch.Substring(0, start + 1));
00135             searchResult.searchCommand.Append(userId);
00136             searchResult.searchCommand.Append(savedSearch.Substring(end));
00137 
00138             return searchResult;
00139         }
00144         public List<RADEVRow> GetResult()
00145         {
00146             return DataAccessLayer.RADEVSearch.GetRadevSearchResult(searchCommand.ToString());
00147         }
00148         #endregion
00149     }
00150 }